package 反射学习;

import po.Person;

import java.lang.reflect.Method;

public class 获取成员方法们 {
    public static void main(String[] args) throws Exception {
        Class personClass = Person.class;

        Method eat_Method = personClass.getMethod("eat");
        //获取方法名称
        Person p = new Person();
        eat_Method.invoke(p);
        //这个invoke需要传入对象和传入参数
        //我在吃饭

        //用传入的参数.class来区分重构的方法
        Method eat_Method2 = personClass.getMethod("eat", String.class);
        eat_Method2.invoke(p, "shit");
        //我在次shit

        System.out.println("-------------------");
        //获取所有public修饰的方法
        Method[] methods = personClass.getMethods();
        for (Method method : methods) {
            System.out.println(method);
            //这里打印的除了Person中定义的public方法,还有Object所定义的方法
            String name = method.getName();
            System.out.println("方法名为" + name);
            //可以像下面这样获取方法
            if (name.equals("setAge")) {
                method.invoke(p, 18);
            }
        }
        System.out.println(p);
        //Person{Name='null', age=18, a='null', b='null', c='null', d='null'}
    }
}
